5 REM PLAYER MISSILE SHAPE EDITOR Jeff Stanton›10 POKE 106,PEEK(106)-16:GRAPHICS 8+16›11 POKE 559,0›12 GOSUB 1000›13 GOSUB 2000›14 POKE 559,62›15 DIM MG(8,22),VALUE$(22),VALUE(22),V$(3),T$(3),W$(6),VH$(1),VL$(1),VT$(2)›16 VALUE$=" ":VALUE$(22)=" ":VALUE$(2)=VALUE$›17 POKE 710,0:GOSUB 815›77 REM READ KEYBOARD›78 OPEN #2,4,0,"K:"›79 ZZ=USR(ADR(PMPOKE$),ADR(VALUE$),PLAYER0,RES)›80 CH=1:GET #2,CHR:X0=X:Y0=Y›81 IF CHR=45 THEN 205:REM UP›85 IF CHR=61 THEN 225:REM DOWN›90 IF CHR=43 THEN 245:REM LEFT›95 IF CHR=42 THEN 265:REM RIGHT›100 IF CHR=80 THEN 125:REM P›105 IF CHR=69 THEN 145:REM E›110 IF CHR=78 THEN 135:REM N›111 IF CHR=82 THEN 1100:REM R›112 IF CHR=87 THEN 1200:REM W›113 IF CHR=125 THEN 3000:REM }›115 GOTO 79›120 REM SET FLAGS FOR P,E,N KEYS›125 PLT=1:ERASE=0:W$="PLOT ":GOSUB 700:GOTO 330›135 PLT=0:ERASE=0:W$="NOPLOT":GOSUB 700:GOTO 79›145 PLT=0:ERASE=1:W$="ERASE ":GOSUB 700:GOTO 365›200 REM MOVE CURSOR UP›205 Y=Y-1:IF Y=0 THEN CH=0›210 IF Y=0 THEN Y=1›215 GOTO 300›220 REM MOVE CURSOR DOWN›225 Y=Y+1:IF Y=23 THEN CH=0›230 IF Y=23 THEN Y=22›235 GOTO 300›240 REM MOVE CURSOR LEFT›245 X=X-1:IF X=0 THEN CH=0›250 IF X=0 THEN X=1›255 GOTO 300›260 REM MOVE CURSOR RIGHT›265 X=X+1:IF X=9 THEN CH=0›270 IF X=9 THEN X=8›275 GOTO 300›300 REM CHANGE MATRIX AND PLOT OR ERASE AS NEEDED›305 IF CH=0 THEN 79›310 IF PLT=1 THEN 330›315 IF ERASE=1 THEN 365›320 GOSUB 400:GOTO 79›325 REM PLOT BLOCK AND INVERSE CURSOR›330 FOR I=1 TO 7:FOR J=1 TO 5:BX=18+X*11:BY=Y*8›345 PLOT BX+I,BY+J:NEXT J:NEXT I›355 MG(X,Y)=1:GOSUB 400:GOTO 500›360 REM ERASE BLOCK›365 COLOR 0:FOR I=1 TO 7:FOR J=1 TO 5›380 BX=18+X*11:BY=Y*8›385 PLOT BX+I,BY+J:NEXT J:NEXT I:COLOR 1›396 MG(X,Y)=0:GOSUB 400:GOTO 500›400 REM PLOT NEW CURSOR POSITION AFTER ERASING OLD›405 C=MG(X0,Y0):IF C=1 THEN 415›410 COLOR 0›415 CX=19+X0*11:CY=3+Y0*8›425 PLOT CX,CY:DRAWTO CX+4,CY›430 PLOT CX+2,CY-2:DRAWTO CX+2,CY+2›435 COLOR 1:C=MG(X,Y):IF C=0 THEN 445›440 COLOR 0›445 CX=19+X*11:CY=3+Y*8›455 PLOT CX,CY:DRAWTO CX+4,CY›460 PLOT CX+2,CY-2:DRAWTO CX+2,CY+2›465 COLOR 1:RETURN ›500 REM CALCULATE NEW VALUE ROW›510 IF PLT=0 AND ERASE=0 THEN 79›515 VALUE(Y)=MG(1,Y)*128+MG(2,Y)*64+MG(3,Y)*32+MG(4,Y)*16+MG(5,Y)*8›516 VALUE(Y)=VALUE(Y)+MG(6,Y)*4+MG(7,Y)*2+MG(8,Y)›517 VALUE$(Y)=CHR$(VALUE(Y))›520 GOSUB 600:GOTO 79›600 REM POKES OR PRINTS VALUE ON SCREEN›605 YP=Y*8:XP=17:V$="000":T$=STR$(VALUE(Y))›619 REM GIVES A THREE CHARACTER NUMBER WITH LEADING 0'S›620 V$(4-LEN(T$))=T$›625 FOR U=1 TO 3›629 REM FIND POSITION IN CHARACTER SET›630 I2=57344+((ASC(V$(U,U))-32)*8)›635 I3=I1+YP*40+XP+U-1›639 REM POKE CHARACTER ON SCREEN (8 BYTES DEEP)›640 FOR Z=0 TO 7:POKE 13+Z*40,PEEK(I2+Z):NEXT Z›645 NEXT U›650 REM PLOTS TWO DIGIT HEX VALUE OF ROW›652 XP=22:V1=INT(VALUE(Y)/16)›654 V2=VALUE(Y)-(16*V1)›656 IF V1=10 THEN VH$="A"›658 IF V1=11 THEN VH$="B"›660 IF V1=12 THEN VH$="C"›662 IF V1=13 THEN VH$="D"›664 IF V1=14 THEN VH$="E"›666 IF V1=15 THEN VH$="F"›668 IF V1<10 THEN VH$=STR$(V1)›670 IF V2=10 THEN VL$="A"›672 IF V2=11 THEN VL$="B"›674 IF V2=12 THEN VL$="C"›676 IF V2=13 THEN VL$="D"›678 IF V2=14 THEN VL$="E"›680 IF V2=15 THEN VL$="F"›682 IF V2<10 THEN VL$=STR$(V2)›686 VT$=VH$:VT$(LEN(VT$)+1)=VL$›687 FOR U=1 TO 2›689 I2=57344+((ASC(VT$(U,U))-32)*8)›690 I3=I1+YP*40+XP+U-1›695 FOR Z=0 TO 7:POKE 13+Z*40,PEEK(I2+Z):NEXT Z›697 NEXT U›699 RETURN ›700 REM PRINTS WORDS ERASE, NOPLOT, & PLOT AT BOTTOM›705 YP=16:XP=32:FOR U=1 TO 6›715 I2=57344+((ASC(W$(U,U))-32)*8)›720 I3=I1+YP*40+XP+U-1›725 FOR Z=0 TO 7:POKE I3+Z*40,PEEK(I2+Z):NEXT Z›730 NEXT U:RETURN ›815 REM INITILIZE AND DRAW GRID›817 I0=PEEK(560)+PEEK(561)*256:I1=PEEK(I0+4)+PEEK(I0+5)*256›818 PLT=0:ERASE=0›819 W$="NOPLOT":GOSUB 700›820 REM DRAW GRID›825 COLOR 1›830 FOR J=1 TO 9›835 X=16+11*J:PLOT X,7:DRAWTO X,183›840 NEXT J›845 FOR I=1 TO 23›850 Y=-1+8*I:PLOT 26,Y:DRAWTO 114,Y›855 NEXT I›860 REM CLEAR MATRIX›865 FOR I=1 TO 8:FOR J=1 TO 22:MG(I,J)=0:NEXT J:NEXT I›867 FOR J=1 TO 22:VALUE(J)=0:NEXT J›869 REM PLOT INITIAL CURSOR POSITION›870 X=1:Y=1›872 PLOT 30,11:DRAWTO 34,11›873 PLOT 32,9:DRAWTO 32,13›875 RETURN ›1000 REM INITIALIZE PMG›1010 PMBASE=PEEK(106):SDMCTL=559:SINGLE=62:DOUBLE=46›1020 POKE 53277,3:POKE 54279,PMBASE:POKE 704,200:POKE 53248,175›1030 REM CLEAR PLAYER 0 RAM›1040 DATA 104,104,133,207,104,133,206,169,0,170,168,145,206,200,192›1042 DATA 0,208,249,230,207,232,224,4,208,242,96›1045 DIM CLEAR$(26):FOR L1=1 TO 26:READ X:CLEAR$(L1,L1)=CHR$(X):NEXT L1›1050 X=USR(ADR(CLEAR$),PMBASE*256+1024)›1060 RETURN ›1100 REM CHANGE PLAYER FROM SINGLE TO DOUBLE LINE RESOLUTION›1110 RES=ABS(RES-2)+1›1120 ZZ=USR(ADR(PMPOKE$),ADR(VALUE$),PLAYER0,RES)›1130 GOTO 79›1200 REM CHANGE PLAYER0 WIDTH›1210 WIDTH=WIDTH+1:IF WIDTH>3 THEN WIDTH=0›1220 IF WIDTH=2 THEN WIDTH=3›1230 POKE 53256,WIDTH:GOTO 79›2000 DATA 104,104,133,207,104,133,206,104,133,209,104,133,208,104›2005 DATA 104,141,0,6,169,0,168,145,208,200,192›2010 DATA 44,208,249,160,0,141,2,6,141,3,6,162,0,172,2,6,177›2015 DATA 206,172,3,6,145,208,232,238›2020 DATA 3,6,236,0,6,208,237,238,2,6,173,2,6,201,22,208,225,96›2030 DIM PMPOKE$(68):FOR L1=1 TO 68:READ X:PMPOKE$(L1,L1)=CHR$(X):NEXT L1›2040 RES=1:PLAYER0=PMBASE*256+1124›2050 RETURN ›3000 REM RECLEAR SCREEN›3005 ? #6;"}";›3010 VALUE$=" ":VALUE$(22)=" ":VALUE$(2)=VALUE$›3020 GOSUB 815›3030 GOTO 79›